const baseURL = 'http://localhost:3000'

let interceptors = {///拦截器
  request(req){///请求拦截器
    return new Promise(next => {
      req.url = (baseURL + req.url)
      req.header = req.header || {}
      //设置token
      if(wx.token) req.header.token = wx.token
      next(req)
    })
  },
  response(res){///响应拦截器
    return new Promise(next=>{
      let data = res.data
      if(res.StatusCode == 404){
        data = {errorMsg:'请求接口不存在'}
        next({errorMsg:'请求接口不存在'})
      }else if(res.StatusCode == 500){
        data = {errorMsg:res.data || '服务器错误，请联系网站管理员'}
        next({errorMsg:res.data || '服务器错误，请联系网站管理员'})
      }else if(res.statusCode == 200){///正常业务
        next(res.data)
      }else{
        data = {errorMsg:res.errMsg || '未知错误'}
      }
      if(data.errorMsg){
        wx.showToast({
          title: 'data.errorMsg',
          icon:'none',
          duration:2000
        })
      }
      next(data)
    })
  }
}

function GET(url,query,args){
  args = args ||{}
  return new Promise((resolve, reject) => {
    interceptors.request({url, ...args}).then(req =>{
        wx.request({
          ...req,
          data:query,
          success:(res)=>{ 
            interceptors.response(res).then(data=>{
              resolve(data)
            })
          },
          fail:(res) => {
            interceptors.response(res).then(data=>{
              resolve(data)
            })
          } 
        })
    })
      
  })
}
function PUT(url,data,args){
  args =args ||{}
  return new Promise((resolve, reject) => {
    interceptors.request({url,...args}).then(req =>{
      wx.request({
        ...req,
        data,
        method:'PUT',
        success:(res)=>{ 
          interceptors.response(res).then(data=>{
            resolve(data)
          })
        },
        fail:(res) => {
          interceptors.response(res).then(data=>{
            resolve(data)
          })
        } 
      })  
    })
    
  })
}
function POST(url,data,args){
  args = args ||{}
  return new Promise((resolve, reject) => {
    interceptors.request({url,...args}).then(req =>{
      wx.request({
        ...req,
        data,
        method:'POST',
        success:(res)=>{ 
          interceptors.response(res).then(data=>{
            resolve(data)
          })
        },
        fail:(res) => {
          interceptors.response(res).then(data=>{
            resolve(data)
          })
        } 
      })  
    })
    
  })
}
function DELETE(url,query,args){
  args = args ||{}
  return new Promise((resolve, reject) => {
    interceptors.request({url, ...args}).then(req =>{
      wx.request({
        ...req,
        data:query,
        method:'DELETE',
        success:(res)=>{ 
          interceptors.response(res).then(data=>{
            resolve(data)
          })
        },
        fail:(res) => {
          interceptors.response(res).then(data=>{
            resolve(data)
          })
        } 
      })  
    })
    
  })
}

module.exports = {
  baseURL,
  get:GET,
  put:PUT,
  post:POST,
  delete:DELETE
}